<?php

/**
 * Pedidos filter form.
 *
 * @package    tercermilenio
 * @subpackage filter
 * @author     Your name here
 */
class PedidosFormFilter extends BasePedidosFormFilter {

    public function configure() {

                $this->widgetSchema['ped_fecha'] = new sfWidgetFormFilterDate(
                        array(
                            'from_date' => new sfWidgetFormJQueryDate(array('format' => '%day%/%month%/%year%')),
                            'to_date' => new sfWidgetFormJQueryDate(array('format' => '%day%/%month%/%year%')),
                            'with_empty' => false,
                ));

                        $this->widgetSchema['ped_fecha_limite'] = new sfWidgetFormFilterDate(
                        array(
                            'from_date' => new sfWidgetFormJQueryDate(array('format' => '%day%/%month%/%year%')),
                            'to_date' => new sfWidgetFormJQueryDate(array('format' => '%day%/%month%/%year%')),
                            'with_empty' => false,
                ));

        $this->widgetSchema['ped_cliente']->setOption('label', 'Cliente');
        $this->widgetSchema['ped_telefono']->setOption('label', 'Teléfono');
        $this->widgetSchema['ped_direccion']->setOption('label', 'Dirección');
        $this->widgetSchema['ped_fecha']->setOption('label', 'Fecha de Expedición');
        $this->widgetSchema['ped_fecha_limite']->setOption('label', 'Fecha Límite');

        $this->widgetSchema['ped_fecha']->addOption('template', 'Desde %from_date%<br />Hasta %to_date%');
        $this->widgetSchema['ped_fecha_limite']->addOption('template', 'Desde %from_date%<br />Hasta %to_date%');
    }

    public function setup() {
        parent::setup();

        $estadosPedidos = array(
            null => 'Todos',
            0 => 'No Vencidos',
            1 => 'Vencidos',
        );

        $this->setWidgets(array(
            'ped_cliente' => new sfWidgetFormPropelChoice(array('model' => 'Clientes', 'add_empty' => 'Seleccione un cliente')),
            'ped_direccion' => new sfWidgetFormFilterInput(array('with_empty' => false)),
            'ped_telefono' => new sfWidgetFormFilterInput(array('with_empty' => false)),
            'pedido_vencido' => new sfWidgetFormChoice(array('choices' => $estadosPedidos)),
            'ped_fecha' => new sfWidgetFormFilterDate(array('from_date' => new sfWidgetFormDateJQueryUI(), 'to_date' => new sfWidgetFormDateJQueryUI(), 'with_empty' => false)),
            'ped_fecha_limite' => new sfWidgetFormFilterDate(array('from_date' => new sfWidgetFormDateJQueryUI(), 'to_date' => new sfWidgetFormDateJQueryUI(), 'with_empty' => false)),
        ));

        $this->setValidators(array(
            'ped_cliente' => new sfValidatorPropelChoice(array('required' => false, 'model' => 'Clientes', 'column' => 'cli_id')),
            'ped_direccion' => new sfValidatorSchemaFilter('text', new sfValidatorString(array('required' => false))),
            'ped_telefono' => new sfValidatorSchemaFilter('text', new sfValidatorString(array('required' => false))),
            'ped_fecha' => new sfValidatorDateRange(array('required' => false, 'from_date' => new sfValidatorDate(array('required' => false)), 'to_date' => new sfValidatorDate(array('required' => false)))),
            'ped_fecha_limite' => new sfValidatorDateRange(array('required' => false, 'from_date' => new sfValidatorDate(array('required' => false)), 'to_date' => new sfValidatorDate(array('required' => false)))),
            'pedido_vencido' => new sfValidatorChoice(array('choices' => array_keys($estadosPedidos), 'required' => false)),
        ));


        $this->widgetSchema->setNameFormat('pedidos_filters[%s]');

        $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
    }

    public function getFields() {
        return array(
            'ped_id' => 'Number',
            'ped_cliente' => 'ForeignKey',
            'ped_direccion' => 'Text',
            'pedido_vencido' => 'Text',
            'ped_telefono' => 'Text',
            'ped_fecha' => 'Date',
            'ped_fecha_limite' => 'Date',
        );
    }

    public function addPedDireccionColumnCriteria(Criteria $criteria, $field, $value) {
        if (!empty($value['text'])) {
            $criteria->addJoin(PedidosPeer::PED_CLIENTE, ClientesPeer::CLI_ID);
            $criteria->add(ClientesPeer::CLI_DIRECCION, '%' . $value['text'] . '%', Criteria::LIKE);
        }
    }

    public function addPedTelefonoColumnCriteria(Criteria $criteria, $field, $value) {
        if (!empty($value['text'])) {
            $criteria->addJoin(PedidosPeer::PED_CLIENTE, ClientesPeer::CLI_ID);
            $criteria->add(ClientesPeer::CLI_TELEFONO, '%' . $value['text'] . '%', Criteria::LIKE);
        }
    }

    public function addPedidoVencidoColumnCriteria(Criteria $criteria, $field, $value) {

        if ($value === '0' || $value === '1') {
            $today = gmdate('Y-m-d');

            if ($value === '0') {
                $criteria->add(PedidosPeer::PED_FECHA_LIMITE, $today, Criteria::GREATER_THAN);
            } elseif ($value === '1') {
                $criteria->add(PedidosPeer::PED_FECHA_LIMITE, $today, Criteria::LESS_THAN);
            }
        }
    }

}
